package demo

func CreateAndSelect() {
	Init()
	DB.AutoMigrate(&Student{})
	// email := "123456@qq.com"

	//单表创建单条数据
	// stu := Student{
	// 	Name:  "小明",
	// 	Age:   18,
	// 	Email: &email,
	// }
	// if err := DB.Debug().Create(&stu).Error; err != nil {
	// 	panic(err)
	// }
	// data, _ := json.Marshal(stu)
	// fmt.Println(string(data))

	//单表创建多条数据
	// stus := make([]*Student, 0)

	// for i := 0; i < 10; i++ {
	// 	stus = append(stus, &Student{
	// 		Name:  fmt.Sprintf("小明%d", i+1),
	// 		Age:   18,
	// 		Email: &email,
	// 	})
	// }
	// if err := DB.Debug().Create(&stus).Error; err != nil {
	// 	panic(err)
	// }
	// data, _ := json.Marshal(stus)
	// fmt.Println(string(data))

	// 单表查询
	// var stu Student
	// var stus []*Student
	//take 查询一条数据只能根据主键检索
	// stu.Id = 4
	// if err := DB.Debug().Take(&stu).Error; err != nil {
	// 	panic(err)
	// }

	//查询第一条
	// if err := DB.Debug().First(&stu).Error; err != nil {
	// 	panic(err)
	// }

	//查询最后一条
	// if err := DB.Debug().Last(&stu).Error; err != nil {
	// 	panic(err)
	// }

	//条件查询
	// if err := DB.Debug().Take(&stu, "name = ?", "小明2").Error; err != nil {
	// 	panic(err)
	// }

	//多条查询
	// if err := DB.Debug().Find(&stus).Error; err != nil {
	// 	panic(err)
	// }

	//查总数
	// count := DB.Debug().Find(&stus).RowsAffected
	// fmt.Println(count)

	//查询多个ID
	// if err := DB.Debug().Find(&stus, []int{3, 6, 9}).Error; err != nil {
	// 	panic(err)
	// }

	//其他查询
	// if err := DB.Debug().Find(&stus, "name in (?)", []string{"小明", "小明3", "小明5"}).Error; err != nil {
	// 	panic(err)
	// }

	// data, _ := json.Marshal(stus)
	// fmt.Println(string(data))

	//单表更新
	//单条数据更新
	//save 更新会跟新零值
	// var stu Student
	// if err := DB.Take(&stu, 11).Error; err != nil {
	// 	panic(err)
	// }
	// stu.Name = "小明是傻B"
	// stu.Age = 11
	// if err := DB.Debug().Save(&stu).Error; err != nil {
	// 	panic(err)
	// }

	//更新指定字段 name
	// if err := DB.Debug().Select("name").Save(&stu).Error; err != nil {
	// 	panic(err)
	// }

	//多条数据更新
	//单列
	// var stus []*Student
	// if err := DB.Debug().Find(&stus, []int{7, 8, 9}).Update("age", 77).Error; err != nil {
	// 	panic(err)
	// }

	// if err := DB.Debug().Model(&Student{}).Where("name = ?", "测试批量").Update("name", "通过").Error; err != nil {
	// 	panic(err)
	// }

	//多列 零值不会更新 使用select指定就行了 Omit忽略字段更新
	//结构体方式
	// if err := DB.Debug().Find(&stus, []int{7, 8, 9}).Select("age").Updates(&Student{Name: "不通过", Age: 0}).Error; err != nil {
	// 	panic(err)
	// }
	// json, _ := json.Marshal(stus)
	// fmt.Println(string(json))

	//map方式
	// if err := DB.Debug().Model(&Student{}).Where("name = ?", "不通过").Updates(map[string]any{"name": "通过", "age": 88}).Error; err != nil {
	// 	panic(err)
	// }

	//删除
	// var stu Student
	//删除单条
	// if err := DB.Debug().Delete(&stu, 11).Error; err != nil {
	// 	panic(err)
	// }

	//删除多条
	// if err := DB.Debug().Delete(&stu, []int{7, 8, 9}).Error; err != nil {
	// 	panic(err)
	// }
	// json, _ := json.Marshal(stu)
	// fmt.Println(string(json))
}
